/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package aprendizajePorRefuerzo.agente;

import aprendizajePorRefuerzo.accion.Accion;
import aprendizajePorRefuerzo.estado.Estado;
import aprendizajePorRefuerzo.politica.Politica;
import aprendizajePorRefuerzo.funcionQ.Q;
import aprendizajePorRefuerzo.reward.Reward;
import java.util.List;

/**
 *
 * @author Fernando Sorzana
 */
public abstract class AgenteImp implements Agente {
    
    private Politica politica;
    
    private Q funcionQ;
    
    private double gamma;
    
    private double alfa;
    
    private Estado estadoAnterior;
    
    private Accion accionAnterior;
    
    private List<Accion> accionesPosibles;

    public Politica getPolitica() {
        return politica;
    }

    public void setPolitica(Politica politica) {
        this.politica = politica;
    }

    public Q getFuncionQ() {
        return funcionQ;
    }

    public void setFuncionQ(Q funcionQ) {
        this.funcionQ = funcionQ;
    }

    public double getGamma() {
        return gamma;
    }

    public void setGamma(double gamma) {
        this.gamma = gamma;
    }

    public double getAlfa() {
        return alfa;
    }

    public void setAlfa(double alfa) {
        this.alfa = alfa;
    }

    public List<Accion> getAccionesPosibles() {
        return accionesPosibles;
    }

    public void setAccionesPosibles(List<Accion> accionesPosibles) {
        this.accionesPosibles = accionesPosibles;
    }

    public Estado getEstadoAnterior() {
        return estadoAnterior;
    }

    public void setEstadoAnterior(Estado estadoAnterior) {
        this.estadoAnterior = estadoAnterior;
    }

    public Accion getAccionAnterior() {
        return accionAnterior;
    }

    public void setAccionAnterior(Accion accionAnterior) {
        this.accionAnterior = accionAnterior;
    }

    @Override
    public Accion tomarAccion(Estado estado) {
        estadoAnterior = estado;
        accionAnterior = politica.tomarAccion(estado, funcionQ, accionesPosibles);
        return accionAnterior;
    }
    
}
